package main

import (
	"fmt"
	"sync"
)

func main() {
	//WaitGroup:他用于等待一组线程的结束，父线程调用add方法来设定等待的线程数量，每个被等待的线程在结束时应调用Done方法，同时，主线程里可以调用Wait方法阻塞至所有线程结束
	//主要为了解决在子协程结束后自动结束

	group := sync.WaitGroup{}

	//启动五个协程
	for i := 0; i <= 5; i++ {
		group.Add(1) //让等待协程的数量加1 add的数一定跟协程的数一样
		go func() {
			fmt.Println("hello zyj", i)
			group.Done() //让等待协程的数量减一  或者使用defer group.Done()也可以
		}()
	}

	//让主线程阻塞，当等待携程的数减为0时就停止了
	group.Wait()
}
